package com.java.Java数据结构;

import java.util.*;

/**
 * 数据结构
 */
public class DataStructure {
    //    数组(arrays)特点： 固定大小，存储相同类型的元素。优点： 随机访问元素效率高。缺点： 大小固定，插入和删除元素相对较慢。
    int array[] = {1, 2, 3, 4};
//    缺点： 中间插入和删除相对较慢。
    int num[] = new int[10];

    //    列表(list)
//    ArrayList:
//    特点： 动态数组，可变大小。
//    优点： 高效的随机访问和快速尾部插入。
//    LinkedList:
//    特点： 双向链表，元素之间通过指针连接。
//    优点： 插入和删除元素高效，迭代器性能好。
//    缺点： 随机访问相对较慢。
    List<String> arrayList = new ArrayList<String>();
    List<String> linkedList = new LinkedList<String>();

    //    集合(sets)用于存储不重复的元素，常见的实现有 HashSet 和 TreeSet。
//    HashSet:
//    特点： 无序集合，基于HashMap实现。
//    优点： 高效的查找和插入操作。
//    缺点： 不保证顺序。
//    TreeSet:
//    特点：TreeSet 是有序集合，底层基于红黑树实现，不允许重复元素。
//    优点： 提供自动排序功能，适用于需要按顺序存储元素的场景。
//    缺点： 性能相对较差，不允许插入 null 元素。
    Set<String> hashSet = new HashSet<>();
    Set<String> treeSet = new TreeSet<>();

    //    映射(Maps)映射（Maps）用于存储键值对，常见的实现有 HashMap 和 TreeMap。
//    HashMap:
//    特点： 基于哈希表实现的键值对存储结构。
//    优点： 高效的查找、插入和删除操作。
//    缺点： 无序，不保证顺序。
//    TreeMap:
//    特点： 基于红黑树实现的有序键值对存储结构。
//    优点： 有序，支持按照键的顺序遍历。
//    缺点： 插入和删除相对较慢。
    Map<String, Integer> hashMap = new HashMap<>();
    Map<String, Integer> treeMap = new TreeMap<>();

    //    栈(Stack)
//    栈（Stack）是一种线性数据结构，它按照后进先出（Last In, First Out，LIFO）的原则管理元素。
//    在栈中，新元素被添加到栈的顶部，而只能从栈的顶部移除元素。这就意味着最后添加的元素是第一个被移除的。
    Stack<String> stack = new Stack<String>();

    //    队列(queue) 遵循先进先出（FIFO）原则，常见的实现有 LinkedList 和 PriorityQueue。
//Queue 接口:
//    特点： 代表一个队列，通常按照先进先出（FIFO）的顺序操作元素。
//    实现类： LinkedList, PriorityQueue, ArrayDeque。
    Queue<String> queue = new LinkedList<>();

    //    堆(Heap)优先队列的基础，可以实现最大堆和最小堆。
    PriorityQueue<Integer> minHeap = new PriorityQueue<>();
    PriorityQueue<Integer> maxHeap = new PriorityQueue<>(Collections.reverseOrder());

    //    树(TRees) Java 提供了 TreeNode 类型，可以用于构建二叉树等数据结构。
    class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;

        TreeNode(int x) {
            val = x;
        }
    }
//    图(Graphs)
//    枚举（Enumeration）
//    位集合（BitSet）
//    向量
//    哈希表（Hashtable）
//    属性（Properties）

}
